//
// Created by 梁河清 on 2024/5/29.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;//顺序表内元素个数
typedef struct Table{
    int *head;
    int length;
    int size;
} Table;
//初始化顺序表
Table initTable(){
    Table t;//结构体变量t
    t.head=malloc(5*sizeof(int));
    //判断开辟空间是否成功
    if(!t.head){
        printf("初始化失败！\n");
        exit(0);
    }
    t.length=0;
    t.size=5;
    return t;
//打印显示顺序表函数displayTable
    void displayTable(Table t){
        for(int i=0;i<t.length;i++){
            printf("%d",t.head[i]);
        }
        printf("\n");
    }
}
//删除元素方法delTable
Table delTable(Table t,int num){
    //t代表函数调用时传进来的顺序表，num代表要删除的那个数的位置(第几个数）
    if(num>t.length||num<1){
        printf("被删除元素的位置有问题\n");
        return t;
    }
    //当删除元素位置没有问题的时候执行下列代码
    for(int i=num;i<t.length;i++){
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}
//在指定位置插入元素
Table addTable(Table t,int elem,int num){
    if(num>t.length||num<1){
        printf("插入元素的位置有问题\n");
        return t;
    }
    if(t.length>=t.size){
        //扩容
        realloc(t.head,(t.size+1)*sizeof(int));
        if(!t.head){
            printf("空间分配失败\n");
        }
        //空间容量size+1
        t.size++;
    }
    int i;
    for(i=t.length-1;i>=num-1;i--){
        t.head[i+1]=t.head[i];
    }
    t.head[num-1]=elem;
    t.length++;
    return t;
}
int fingNum(Table t,int num){
    for(int i=t.length-1;i>=0;i++){
        if(t.head[i]==num){
            return i+1;
        }
    }
    return -1;
}
Table xiugai(Table t,int num,int elem){
    for (int i=t.length-1;i>=0;i--){
        if(t.head[i]==num){
            t.head[i]=elem;
            return t;
        }
    }
}
int main(){
    Table t1=initTable();
    int i;
    for(int i=0;i<5;i++){
        t1.head[i]=i;
        t1.length++;
    }
    printf("打印原顺序表：\n");
    //打印原顺序表
    displayTable(t1);
    //删除元素
    printf("删除元素\n");
    t1=delTable(t1,3);
    displayTable(t1);
    //在第2个元素位置插入元素5
    printf("在第2个元素位置插入元素5\n");
    addTable(t1,5,3);
    displayTable(t1);
    //查找元素3的位置
    int a= fingNum(t1,3);
    if(a!=-1){
        printf("3所在的位置：%d\n",a);
    } else{
        printf("没有找到");
    }
    printf("将3修改为6的顺序：");
    t1=xiugai(t1,3,6);
    diaplayTable(t1);
}

